Classe utilitária para leitura de dados
import java.util.Scanner;

public class Leitura {
   private static Scanner teclado = new Scanner(System.in);

   public static void limparBuffer() {
                if (teclado.hasNextLine()) {
                        teclado.nextLine();
                }
   }

    // ---------- TIPOS NUMÉRICOS ----------

   public static int lerValorInteiro(String mensagem) {
                int valor = 0;

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextInt();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                } finally {
                        limparBuffer();
                }

                return valor;
   }

   public static float lerValorFloat(String mensagem) {
                float valor = 0;

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextFloat();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                } finally {
                        limparBuffer();
                }

                return valor;
   }

        public static double lerValorDouble(String mensagem) {
                double valor = 0;

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextDouble();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                } finally {
                        limparBuffer();
                }

                return valor;
        }

        public static long lerValorLong(String mensagem) {
                long valor = 0;

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextLong();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                } finally {
                        limparBuffer();
                }

                return valor;
        }

        public static short lerValorShort(String mensagem) {
                short valor = 0;

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextShort();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                } finally {
                        limparBuffer();
                }

                return valor;
        }

        public static byte lerValorByte(String mensagem) {
                byte valor = 0;

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextByte();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                } finally {
                        limparBuffer();
                }

                return valor;
        }

    // ---------- TIPOS TEXTUAIS ----------

   public static String lerValorString(String mensagem) {
                String valor = "";

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextLine();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                }
                
                return valor;
        }

        public static char lerValorChar(String mensagem) {
                char valor = '\0';

                try {
                        System.out.print(mensagem);
                        String entrada = teclado.nextLine();

                        if (entrada.length() > 0) {
                                        valor = entrada.charAt(0);
                        }
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto.");
                }

                return valor;
        }

    // ---------- TIPOS LÓGICOS ----------

        public static boolean lerValorBoolean(String mensagem) {
                boolean valor = false;

                try {
                        System.out.print(mensagem);
                        valor = teclado.nextBoolean();
                } catch (Exception e) {
                        System.out.println("Valor digitado é incorreto. Digite true ou false.");
                } finally {
                        limparBuffer();
                }

                return valor;
        }
}